import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import WindiCSS from 'vite-plugin-windicss';
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
import JiessBase from '@jiess/utils/vite';
import AutoImport from 'unplugin-auto-import/vite';
import { JiessResolver } from '@jiess/utils/resolver';
// https://vitejs.dev/config/
export default defineConfig((mode) => {
	const env = loadEnv(mode.mode, process.cwd());
	return {
		base: env.VITE_CONFIG_BASE,
		plugins: [vue(), vueJsx(), WindiCSS(), vueSetupExtend(),
			JiessBase({
				env: 'vue3'
			}),
			AutoImport({
				resolvers: [JiessResolver()],
				eslintrc: {
					enabled: true, // Default `false`
					filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
					globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
				},
			}),
		],
		resolve: {
			extensions: ['.js', '.jsx', '.json', '.vue', '.scss', '.css'],
			alias: {
				'@': fileURLToPath(new URL('./src', import.meta.url))
			}
		},
		// 打包配置
		build: {
			// 小于此阈值的导入或引用资源将内联为 base64 编码，
			// 以避免额外的 http 请求。设置为 0 可以完全禁用此项。
			assetsInlineLimit: 4096,
			// 设置最终构建的浏览器兼容目标。
			target: 'modules',
			// 指定输出路径
			outDir: env.VITE_OUT_DIR,
			// 指定生成静态资源的存放路径
			assetsDir: 'assets',
			// 混淆器，terser构建后文件体积更小
			minify: 'terser',
			// 若 outDir 在 root 目录下，
			// 则 Vite 会在构建时清空该目录
			emptyOutDir: true
		},
		css: {
			devSourcemap: true
		},
		server: {
			port: env.VITE_SERVER_PORT,
			host: '0.0.0.0',
			cors: true, // 默认启用并允许任何源
			strictPort: false, // 端口被占用尝试下一个可用端口
			// open: true, // 启动时自动在浏览器中打开
			// 反向代理配置，注意rewrite写法
			// proxy: {
			// 	'/api': {
			// 		changeOrigin: true,
			// 		target: env.VITE_BASE_URL,
			// 		rewrite: path => path.replace(/^\/api/, ''),
			// 	}
			// }
		}
	}
})